package com.hzh.spark.core

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Demo1WordCount {

  def main(args: Array[String]): Unit = {
    /**
     * 1、创建spark环境
     *
     */
    //spark环境配置
    val conf = new SparkConf()
    //设置spark的任务名称
    conf.setAppName("Demo1WordCount")
    //设置spark的运行模式，local：本地模式
    conf.setMaster("local")
    //创建spark的上下文的对象，sc是spark的入口
    val sc: SparkContext = new SparkContext(conf)
    /**
     * 2、读取文件
     *
     * RDD:弹性的分布式数据集，可以当成list集合使用
     *
     */
    val linesRDD: RDD[String] = sc.textFile("data/words.txt")
    /**
     * 3、将单词展开
     */
    val flatRDD: RDD[String] = linesRDD.flatMap(line => line.split(","))
    /**
     * 4、按照单词分组
     *
     */
    val kvRDD: RDD[(String, Iterable[String])] = flatRDD.groupBy(line => line)
    /**
     *
     * 5、统计单词的数量
     *
     */
    val wordCount: RDD[(String)] = kvRDD.map {
      case (word: String, iterable: Iterable[String]) =>
        val count: Int = iterable.size
        s"${word}\t${count}"
    }
    /**
     *
     * 6、保存数据
     */
    wordCount.saveAsTextFile("data/word-count")
  }
}
